FAQs
为什么 Zapier 不支持更新的 Node.js 版本?
我们使用 AWS Lambda 运行您的代码,而 AWS Lambda 只支持少数 版本 的 Node.js。有时这不包括最新版本。此外,由于 Zapier 平台上有数千个集成在运行,我们必须确保升级到最新 Node.js 版本不会造成负面影响。
如何手动设置 Node.js 版本来运行我的集成?
更新 package.json
中的 zapier-platform-core
依赖项。每种主要版本都对应特定版本的 Node.js。您可以在 这里 找到映射关系。我们只支持 AWS Lambda 支持的版本。
重要注意事项:AWS 会定期弃用已达到生命周期末期的 Node.js 版本。他们会在 博客 上发布公告。类似信息和日期可以在 GitHub 上找到。在该日期到来之前,我们会发布一个针对更新 Node.js 版本的 core
版本。
如果您在截止日期前未升级,AWS 在尝试运行您的集成代码时可能会抛出错误。如果发生这种情况,我们会改用仍受支持的最旧 Node.js 版本。总之,如果您不定期更新集成依赖项,我们可能会在您意料之外使用更新的 Node.js 版本运行您的代码。
什么时候使用占位符或花括号?
在示例中,您会看到 模板字面量占位符 $\{var\}
和(双)“花括号” {\{var}\}
。
经验法则:在函数内部使用 $\{var\}
,在 简写请求 中使用 {\{var}\}
。
模板字面量占位符会在代码行执行时立即求值。这意味着,如果您在触发器配置的简写请求中使用 $\{process.env.VAR\}
,那么 zapier push
在构建您的集成时会用本地环境的 VAR
值替换它,因此通过 zapier env:set
设置的值不会被使用。
如果您不熟悉 模板字面量,请知道 const val = "a" + b + "c"
本质上等同于:
const val = `a${b}c`;
从 v17 开始,z.request()
如果在请求对象中包含 {\{var}\}
,会抛出错误。
Zapier 是否支持 XML (SOAP) API?
Zapier 本身不支持,但可以通过实现来支持!用户报告说,以下 npm
模块与 CLI 平台兼容:
从 core v10 开始,简写请求 可以解析 XML。通过一个 afterResponse
中间件 将 response.data
设置为解析后的 XML:
const xml = require("pixl-xml");
const App = {
// ...
afterResponse: [
(response, z, bundle) => {
// 仅在 core v10+ 中有效!
response.throwForStatus();
response.data = xml.parse(response.content);
return response;
},
],
// ...
};
分页是怎么回事?什么时候使用以及如何工作?
已移至 分页。
去重是如何工作的?
每次轮询 Zap 运行时,Zapier 会从响应中的每个项目提取一个唯一的“主键”。Zapier 需要决定哪些项目应该触发 Zap。为此,我们会将这些主键与之前见过的主键进行比较,针对新对象触发 Zap,并更新已见主键列表。当 Zap 开启时,我们会通过一次轮询初始化已见主键列表;当 Zap 关闭时,我们会清除该列表。因此,确保轮询端点调用始终返回最新项目非常重要。
例如,初始轮询返回对象 4、5 和 6(其中主键越大越新)。如果后续轮询增加了限制并返回对象 1-6,那么 1、2 和 3 将被(错误地)视为新对象。
默认情况下,primary
键是项目的 id
字段。从 v15.6.0 开始,您可以通过在 outputFields
中将 primary
设置为 true 来自定义 primary
键。
这里 有更详细的解释。
为什么我的触发器在没有提供显式 id 字段时会报错?
为了让去重功能正常工作,我们需要能够识别和使用一个唯一字段。在旧的、传统的 Zapier Web Builder 集成中,如果没有 id
,我们会猜测。但为了确保我们不会猜错,现在我们要求开发者提供 id
字段。如果您的对象有一个不同名称的唯一字段,可以调整以下代码片段,并确保测试通过:
// ...
let items = response.data.items; // 或 response.json.items,如果您使用的是 core v9 或更旧版本
return items.map((item) => {
item.id = item.contactId;
return item;
});
从 v15.6.0 开始,您也可以定义一个或多个 outputFields
作为 primary
,而非使用默认的 id
字段。例如:
{
triggers: {
recipe: {
operation: {
outputFields: [
{ key: "userId", primary: true },
{ key: "slug", primary: true },
{ key: "name" },
];
}
}
}
}
这会告诉 Zapier 使用 (userId, slug)
作为唯一的去重主键。
限制:primary
选项目前不支持将顶层字段与使用双下划线键的嵌套字段混合使用。例如,如果您在 id
和 user__id
上都设置 primary: true
,那么 user__id
上的设置会被忽略;仅 id
用于去重。但是,如果所有 primary
字段都是嵌套的(如 user__id
+ user__name
),它会按预期工作。
Node X 不再受支持
如果您看到以下错误:
InvalidParameterValueException An error occurred (InvalidParameterValueException) when calling the CreateFunction operation: The runtime parameter of nodejs6.10 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejsX.Y) while creating or updating functions.
… 那么您需要将 zapier-platform-core
依赖项更新到使用更新 Node.js 版本的非弃用版本。请尽快完成以下步骤:
-
编辑
package.json
,使其依赖于更晚的主要版本的zapier-platform-core
。可以在 变更日志 中找到所有重大更改(标记为 ❗)。 -
递增
package.json
中的version
属性。 -
确保本地使用 Node.js v18(或更高版本)(运行
node -v
)。如果需要,使用 nvm 切换版本。 -
运行
rm -rf node_modules && npm i
以获取最新副本。 -
运行
zapier test
以确保测试仍通过。 -
运行
zapier push
。 -
运行
zapier promote YOUR_NEW_VERSION
(来自步骤 2)。 -
将用户从旧版本迁移到新版本(
zapier migrate OLD_VERSION YOUR_NEW_VERSION
)。
哪些分析数据会被收集?
从 v8.4.0 开始,Zapier 会收集每个 CLI 工具调用的信息。
这些数据仅用于改进 CLI 体验,不会用于广告或其他非产品目的。有 3 种基于每台计算机的收集模式。
匿名模式
当您在 anonymous
模式下运行命令时,以下数据会发送给 Zapier:
-
您运行的命令
-
该命令是否为已知命令
-
您提供的参数数量(但不包括参数内容)
-
您使用的标志(但不包括标志内容)
-
您使用的 CLI 版本
-
CLI 命令运行的集成应用
启用模式(默认)
当分析完全 enabled
时,除了上述数据外,还会发送:
-
您的操作系统(调用
process.platform
的结果) -
您的 Zapier 用户 ID
禁用模式
最后,分析可以完全 disabled
,通过运行 zapier analytics --mode disabled
或将环境变量 DISABLE_ZAPIER_ANALYTICS
设置为 1
。
我们会非常小心地不收集任何关于您文件系统或其他机密信息。您可以通过在任何命令前加上 DEBUG=zapier:analytics
来查看实时收集的内容。
“App”和“Integration”有什么区别?
我们正在 Zapier 营销术语中进行一些重命名。最终,我们会在所有地方使用“integration”。在此之前,请知道这些术语是可互换的,都描述了您编写的连接 API 到 Zapier 的代码。
performGet 是什么作用?
performGet
方法是 Zapier 中的一个可选功能,用于检索对象的详细信息。例如,如果您的 create
操作的 perform
方法只返回新对象的 ID
,您可以使用 performGet
通过该 ID
获取对象的完整属性。performGet
仅适用于 Create
或 Search
操作,并且在初始 perform
结果有限且需要更多信息时最有用。每次 create
或 search
运行时,perform
的结果会自动通过 bundle.inputData
传递给 performGet
,从而允许您获取更全面的详细信息。请注意,performGet
仅在 perform
返回的结果不为空时才会被调用。